package tech.aistar.day12.homework2;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * 本类用来演示: 文件夹的拷贝
 *
 * NIO/BIO
 *
 * @author: success
 * @date: 2022/8/4 9:34 上午
 */
public class FolderDemo {
    public static void main(String[] args) {
        copyFolder("/Users/admin/Desktop/dy_corejava_note","/Users/admin/Desktop/dy_corejava_note_副本");
    }

    //文件夹拷贝
    public static void copyFolder(String srcDir,String targetDir){
        //1. 判断srcDir是否为目录
        File srcFile = new File(srcDir);
        //2. srcFile是否存在
        if(!srcFile.exists()){
            System.out.println("sorry,file not found!");
            return;
        }

        if(srcFile.isFile()){
            //直接文件的拷贝
            copyFile(srcDir,targetDir);

        }else if(srcFile.isDirectory()){//目录
            //文件夹的拷贝 - 拿到文件夹的名称 - 进行创建
            File targetFile = new File(targetDir);
            targetFile.mkdirs();

            //拿到srcFile这个文件夹下面的所有的第一层的file的名称
            String[] fileNames = srcFile.list();
            //递归调用自己
            for (String dirName : fileNames) {//包含文件/目录的名称
                copyFolder(srcDir+"/"+dirName,targetDir+"/"+dirName);
            }
        }
    }


    //内置的了文件的拷贝的方法
    public static void copyFile(String src,String target){
        Path srcPath = Paths.get(src);
        Path targetPath = Paths.get(target);
        try {
            Files.copy(srcPath,targetPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void testPath(){
        //nio中 - new-io
        //1. java.nio.Path => 对应 java.io.File
        Path dir = Paths.get("src/tech/aistar/day12/path.txt");
        //2. nio - 强大的文件的工具类
        try {
            Files.createFile(dir);
            System.out.println("创建文件!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
